package com.zmn.oms.zmn.business.interfaces.work.customwork;

import com.zmn.oms.common.exception.OmsBaseException;
import com.zmn.oms.model.dto.master.MultiMasterDTO;
import com.zmn.oms.model.dto.order.OrderDTO;
import com.zmn.oms.model.dto.work.masterwork.ModifyProductDTO;
import com.zmn.oms.model.dto.work.modify.ChannelUpdateDTO;
import com.zmn.oms.model.dto.work.modify.OrderDistributeDTO;
import com.zmn.oms.model.dto.work.modify.OrderUpdateStatusDTO;
import com.zmn.oms.model.entity.work.OrderWork;

/**
 * 类描述：客服工单业务接口-zmn-通用
 *
 * @author liuying
 * @date 2018/12/11 17:05
 */
public interface ZsCustomWorkBService {

    /**
     * 更新多师傅状态
     *
     * @param orderId
     * @param workId
     * @throws OmsBaseException
     */
    void updateOrderMultiMasterByOrderId(Long orderId, Long workId, Integer dbMultiMaster) throws OmsBaseException;

    /**
     * 保存派单
     *
     * @param distributeDTO 派单
     */
    boolean saveDistribute(OrderDistributeDTO distributeDTO) throws OmsBaseException;

    /**
     * 保存派单(新)
     *
     * @param distributeDTO 派单（新）
     */
    boolean saveNewDistribute(OrderDistributeDTO distributeDTO) throws OmsBaseException;

    /**
     * 保存多工程师
     *
     * @param multiMasterDTO 多工程师
     * @throws OmsBaseException
     */
    void saveMultiMaster(MultiMasterDTO multiMasterDTO) throws OmsBaseException;

    /**
     * 保存多工程师
     *
     * @param multiMasterDTO 多工程师
     * @throws OmsBaseException
     */
    void saveMultiMasterNoLog(MultiMasterDTO multiMasterDTO) throws OmsBaseException;


    /**
     * 修改订单状态，已确认->已录入
     *
     * @param orderUpdateStatusDTO
     */
    void updateConfirmToInputStatus(OrderUpdateStatusDTO orderUpdateStatusDTO);

    /**
     * 派单撤回，修改状态到已分派
     *
     * @param orderUpdateStatusDTO
     */
    void updateToAssignStatus(OrderUpdateStatusDTO orderUpdateStatusDTO)throws OmsBaseException;

    /**
     * 分单撤回，状态修改到 已确认 </br>
     * 已支付金额&优惠（不包含：人工优惠）不清
     * 清空时间数据： 分单、派单、领单、上门
     * 清空服务信息：服务项目&保修卡信息&照片
     * 清空角色信息：服务商/子公司、工程师
     * 清空配件，将内采配
     *
     * @param updateStatusDTO
     */
    void updateAssignBack(OrderUpdateStatusDTO updateStatusDTO) throws OmsBaseException;

    /**
     * 产品变更，清空服务项、价格等数据
     *
     * @param orderId
     * @param workId
     */
    void updateCleanOrderAndAmount(Long orderId, Long workId, Integer servCategId, OrderDTO orderDTO)throws OmsBaseException;

    /**
     * 改渠道
     *
     * @param channelUpdateDTO
     */
    void updateChannel(ChannelUpdateDTO channelUpdateDTO) throws OmsBaseException;

    /**
     * 修改产品
     * @param modifyProductDTO
     * @param orderWork
     */
    void updateProduct(ModifyProductDTO modifyProductDTO, OrderWork orderWork) throws OmsBaseException;
}
